/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package co.com.claro.administracionSolicitudes.beans;

import co.com.claro.administracionSolicitudes.entity.Grupo;
import co.com.claro.administracionSolicitudes.entity.Usuario;
import co.com.claro.administracionSolicitudes.entity.enums.GruposEnum;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;

/**
 *
 * @author Mike
 */
@ManagedBean
@RequestScoped
public class SeguridadBean {

    @ManagedProperty(value = "#{usuarioSessionBean}")
    private UsuarioSessionBean sesionBean;

    private boolean isAdministrador;
    private boolean isSolicitante;
    private boolean isAprobador;
    private boolean isAsignador;
    private boolean isEjecutor;
    private boolean isUsuarioRed;

    /**
     * Creates a new instance of SeguridadBean
     */
    public SeguridadBean() {
    }

    @PostConstruct
    public void inicializarValores() {
        Usuario usuario = sesionBean.getUsuario();

        validarUsuarioRed(usuario);

        Grupo grupo = obtenerGrupoUsuario(usuario);
        //Mostrar los componentes basado en el rol del usuario
        if (grupo.getIdGrupo().equals(GruposEnum.ADMINISTRADOR.getId())) {
            isAdministrador = true;
            isAprobador = true;
            isAsignador = true;
            isEjecutor = true;
            isSolicitante = true;
        } else if (grupo.getIdGrupo().equals(GruposEnum.APROBADOR.getId())) {
            isAprobador = true;
            isSolicitante = true;
        } else if (grupo.getIdGrupo().equals(GruposEnum.ASIGNADOR.getId())) {
            isAsignador = true;
            isSolicitante = true;
        } else if (grupo.getIdGrupo().equals(GruposEnum.EJECUTOR.getId())) {
            isSolicitante = true;
            isEjecutor = true;
        } else if (grupo.getIdGrupo().equals(GruposEnum.SOLICITANTE.getId())) {
            isSolicitante = true;
        }
    }

    //++++++++++++++++++++++++++++++++++++++++ MÉTODOS PROPIOS DEL BEAN ++++++++++++++++++++++++++++//
    /**
     * Método que obtiene el grupo de seguridad (ROL) al que pertenece el
     * usuario dentro del sistema.
     *
     * @param usuario, usuario que se va a obtener el grupo de seguridad.
     * @return Grupo, grupo de seguridad al que pertenece el usuario.
     */
    private Grupo obtenerGrupoUsuario(Usuario usuario) {
        return usuario.getGrupoList().get(0);
    }

    /**
     * Método que coloca el valor a la variable de control para saber si el
     * usuario tiene o no usuario de red. Solo valida si el usuario tiene
     * usuario de red, por defecto la variable es falsa.
     *
     * @param usuario, el usuario a ser validados
     */
    private void validarUsuarioRed(Usuario usuario) {
        if (usuario.getUsuarioRed() == 1) {
            isUsuarioRed = true;
        }
    }

    //++++++++++++++++++++++++++++++++++++++++ EVENTOS PROPIOS DEL BEAN ++++++++++++++++++++++++++++//
    public String paginaAplicacion() {
        return "/Administrador/crearAplicacion?faces-redirect=true";
    }

    public String paginaCargo() {
        return "/Administrador/crearCargo?faces-redirect=true";
    }

    public String paginaCiudad() {
        return "/Administrador/crearCiudad?faces-redirect=true";
    }

    public String paginaCompaniaInterna() {
        return "/Administrador/crearCompaniaInterna?faces-redirect=true";
    }

    public String paginaCoordinacion() {
        return "/Administrador/crearCoordinacion?faces-redirect=true";
    }

    public String paginaEmpresa() {
        return "/Administrador/crearEmpresa?faces-redirect=true";
    }

    public String paginaGerencia() {
        return "/Administrador/crearGerencia?faces-redirect=true";
    }

    public String paginaTipoAplicacion() {
        return "/Administrador/crearTipoAplicacion?faces-redirect=true";
    }

    public String paginaTipoDocumento() {
        return "/Administrador/crearTipoDocumento?faces-redirect=true";
    }

    public String paginaTipoEmpleado() {
        return "/Administrador/crearTipoEmpleado?faces-redirect=true";
    }

    public String paginaPerfil() {
        return "/Administrador/crearPerfil?faces-redirect=true";
    }

    public String paginaAsignar() {
        return "/Asignador/asignarSolicitud?faces-redirect=true";
    }

    public String paginaEjecutar() {
        return "/Ejecutor/ejecutarSolicitud?faces-redirect=true";
    }

    public String paginaInicio() {
        return "/Solicitante/inicio?faces-redirect=true";
    }

    public String paginaSolicitud() {
        return "/Solicitante/solicitud?faces-redirect=true";
    }

    public String paginaCambioPassword() {
        return "/Solicitante/cambioPassword?faces-redirect=true";
    }

    public String paginaModificarPerfil() {
        return "/Solicitante/perfil?faces-redirect=true";
    }

    public String paginaCertificarUsuarios() {
        return "/Aprobador/certificarUsuarios?faces-redirect=true";
    }

    public String paginaSolicitudesGerencia() {
        return "/Aprobador/solicitudesGerencia?faces-redirect=true";
    }

    public String paginaCambioEjecutor() {
        return "/Asignador/cambioEjecutor?faces-redirect=true";
    }

    public String paginaConsultaSolicitudes() {
        if (isAdministrador) {
            return "/Administrador/consultaSolicitudesAdmin?faces-redirect=true";
        } else {
            return "/Solicitante/consultaSolicitudes?faces-redirect=true";
        }
    }

    public String paginaConsultaUsuarios() {
        return "/Solicitante/consultaUsuarios?faces-redirect=true";
    }

    public String paginaPrivilegios() {
        return "/Administrador/privilegios?faces-redirect=true";
    }
    //++++++++++++++++++++++++++++++++++++++++ GETTERS Y SETTERS ++++++++++++++++++++++++++++//

    public boolean isIsAdministrador() {
        return isAdministrador;
    }

    public void setIsAdministrador(boolean isAdministrador) {
        this.isAdministrador = isAdministrador;
    }

    public boolean isIsSolicitante() {
        return isSolicitante;
    }

    public void setIsSolicitante(boolean isSolicitante) {
        this.isSolicitante = isSolicitante;
    }

    public boolean isIsAprobador() {
        return isAprobador;
    }

    public void setIsAprobador(boolean isAprobador) {
        this.isAprobador = isAprobador;
    }

    public boolean isIsAsignador() {
        return isAsignador;
    }

    public void setIsAsignador(boolean isAsignador) {
        this.isAsignador = isAsignador;
    }

    public boolean isIsEjecutor() {
        return isEjecutor;
    }

    public void setIsEjecutor(boolean isEjecutor) {
        this.isEjecutor = isEjecutor;
    }

    public UsuarioSessionBean getSesionBean() {
        return sesionBean;
    }

    public void setSesionBean(UsuarioSessionBean sesionBean) {
        this.sesionBean = sesionBean;
    }

    public boolean isIsUsuarioRed() {
        return isUsuarioRed;
    }

    public void setIsUsuarioRed(boolean isUsuarioRed) {
        this.isUsuarioRed = isUsuarioRed;
    }

    public boolean isIsOnlySolicitante() {
        if (isSolicitante || isEjecutor) {
            return !isAdministrador && !isAprobador && !isAsignador;
        }
        return false;
    }

    public boolean isNotOnlySolicitante() {
        return isAdministrador || isAprobador || isAsignador;
    }

}
